package zhu.yu.api.static0;
/*
一旦使用static修饰成员方法，那么这成为了静态方法，静态方法不属于对象，而是属于类的


如果没有static关键字，那么必须先创建对象，然后通过对象才能使用它
如果有了static关键字，那么不需要创建对象，直接就能通过类名称使用它
（对于静态方法来说，可以通过对象名调用，也可以直接通过类名称调用）

无论是成员变量，还是成员方法，如果有了static，都推荐使用类名称进行调用

静态变量: 类名称.静态变量
静态方法：类名称.静态方法()

注意事项：
    1. 静态不能直接访问非静态
        原因：因为在内存当中是 先 有的静态内容 后 有的非静态内容
        “先人不知道后人，但是后人知道先人”
    2. 静态方法当中不能用this
        原因：this 代表当前对象，通过谁调用的方法，谁就是当前对象。而静态方法不需要对象调用
 */
public class StaticMethod2 {
    public static void main(String[] args) {
        // 先创建对象，然后通过对象才能使用它
        MyClass2 obj = new MyClass2();
        obj.method();

        // 对于静态方法来说，可以通过对象名调用，也可以直接通过类名称调用
        obj.methodStatic();  // 对象名调用  不推荐  这种写法在编译后也会被javac编译成为"类名称.静态方法"
        MyClass2.methodStatic();  // 直接通过类名称调用  推荐

        // 对于本来当中的静态方法可以省略类名称
        MyMethod();   // 编译后也是  StaticMethod2.MyMethod();
        StaticMethod2.MyMethod(); // 完全等效
    }
    public static void MyMethod() {
        System.out.println("自己的方法");
    }
}
